import 'package:extended_image/extended_image.dart';
import 'package:flutter/material.dart';

class ImageHeroOne extends StatelessWidget {
  final String tagId;
  final String imageUrl;
  const ImageHeroOne({super.key, required this.tagId, required this.imageUrl});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Hero(
          tag: tagId,
          child: _buildImageView(imageUrl),
        ),
      ),
    );
  }

  Widget _buildImageView(String imagePath) {
    return ExtendedImage.network(
      imagePath,
      width: double.infinity,
      height: double.infinity, // 屏幕高度
      fit: BoxFit.fitWidth,
      cache: true,
      mode: ExtendedImageMode.gesture,
      initGestureConfigHandler: (state) {
        return GestureConfig(
          // 缩放最小值
          minScale: 1,
          // 缩放动画最小值 当缩放结束时回到 minScale 值
          animationMinScale: 0.5,
          // 缩放最大值
          maxScale: 3.0,
          // 缩放动画最大值 当缩放结束时回到 maxScale 值
          animationMaxScale: 4.0,
          // 缩放拖拽速度
          speed: 1.0,
          // 拖拽惯性速度
          inertialSpeed: 100.0,
          initialScale: 1.0,
          // 是否使用 ExtendedImageGesturePageView 展示图片
          inPageView: true,
          // 当图片的初始化缩放大于 1.0 的时候，根据相对位置初始化图片
          initialAlignment: InitialAlignment.center,
        );
      },

      /// 加载状态回调
      loadStateChanged: (ExtendedImageState state) {
        switch (state.extendedImageLoadState) {
          /// 加载中
          case LoadState.loading:
            // 自己写的加载中的Loading组件
            return Center(
              child: CircularProgressIndicator(),
            );

          /// 加载成功
          case LoadState.completed:
            return state.completedWidget;

          /// 加载失败
          case LoadState.failed:
            // 自己写的加载失败的组件 并且把重试的回调传递过去
            return Center(
              child: Text('加载失败,点击重试'),
            );
        }
      },
    );
  }
}
